04 - Przekształcenia geometryczne

Wprowadzenie do przetwarzania obrazów

Politechnika Poznańska, Instytut Robotyki i Inteligencji Maszynowej

Ćwiczenie laboratoryjne 4: Przekształcenia geometryczne

Powrót do spisu treści ćwiczeń laboratoryjnych

Obsługa myszy i rysowanie figur na obrazie

W celu obsługi myszy niezbędne jest “podpięcie” funkcji jej obsługi (tzw. callbacku) do odpowiedniego okna. Jest to realizowane za pomocą funkcji setMouseCallback (dokumentacja). Wymagany format tej funkcji wygląda następująco: MouseCallback(event, x, y, flags, userdata). Zdarzenia oraz flagi związane z obsługą myszki znajdziesz w https://docs.opencv.org/5.x/d0/d90/group__highgui__window__flags.html.

W momencie wystąpienia zdarzenia (tj. naciśnięcia jednego z przycisków myszy, lub klawisza CTRL, SHIFT lub ALT) wywołana będzie podpięta funkcja, której argumenty zostaną przez system automatycznie uzupełnione (tj. przekazana będzie aktualna położenie kursora na obrazie, a wszystkie flagi przyjmą odpowiednie wartości). Własne dane do funkcji obsługi zdarzenia można przekazać jako argument userdata.

💥 Zadanie do wykonania 💥

Napisz program rysujący kwadrat po naciśnięciu lewego klawisza myszy oraz okrąg po naciśnięciu prawego. Wykorzystaj do tego celu funkcję cv2.circle oraz cv2.rectangle (dokumentacja), wykorzystując do tego celu współrzędne kursora myszy i przykładowy kod dostępny w https://docs.opencv.org/5.x/db/d5b/tutorial_py_mouse_handling.html.

Uwaga:
W systemie Ubuntu pod prawym przyciskiem myszy kryje się menu kontekstowe. Z tego powodu należy kliknąć prawy przycisk dwukrotnie lub wykorzystać środkowy przycisk myszy.

Transformacje geometryczne

Oprócz poznanej na ostatnich zajęciach operacji skalowania w OpenCV dostępne są również inne transformacje geometryczne takie jak translacja (przesunięcie), czy rotacja (obrót).

Oba te przekształcenia oraz skalowanie są szczególnymi przypadkami (elementami) transformacji afinicznej. Jej cechą jest zachowanie równoległości - linie równoległe pozostają równoległe również po zastosowaniu przekształcenia.

💥 Zadanie do wykonania 💥

Histogramy

Histogram obrazuje liczebność poszczególnych wartości jasności pikseli na obrazie. W przypadku obrazu w skali szarości możliwy jest podział na maksimum 256 przedziałów (każdy o szerokości 1) lub mniejszą liczbę, w której każda grupuje pewien zbiór wartości (dla 4 przedziałów będą to wartości 0 - 63, 64 - 127, 128 - 191, 192 - 255). Przykładowy histogram (pochodzi ze strony):

💥 Zadanie do wykonania 💥

Zapoznaj się z histogramami w opencv https://docs.opencv.org/5.x/d1/db7/tutorial_py_histogram_begins.html, a następnie wykonaj kroki:

Uwaga:
Do wyznaczania histogramu użyć funkcji OpenCV - cv2.calcHist, natomiast do wyświetlania bibliotekę matplotlib.

Zadania do samodzielnej realizacji

💥 Zadanie do wykonania 💥

Napisz program, który umożliwia zaznaczenie dwóch punktów (będzie to lewy górny róg i prawy dolny pewnego obszaru) i wykonanie w tym fragmencie obrazu operacji progowania dla kanału G (zielonego).

💥 Zadanie do wykonania 💥

Napisaz program, który po wskazaniu przez użytkownika czterech punktów na obrazie docelowym wklei w niego drugi obraz tak, aby wskazane punkty określały jego narożniki (celem jest zastąpienie jednego z obrazów wiszących w galerii sztuki obrazem mopsa).

Uwaga:
Zadanie może wymagać dodawania obrazów z maską (bitwise operation).